<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 构造函数：根据对象的属性，创建对象，动态给添加属性，返回这个对象。
        function Hero(name,age,sex,level){
             this.name=name;
             this.age=age;
             this.sex=sex;
             this.level=level;

             this.sing=function(address){
                console.log(`来打${address}`);
             }
             
        }  
        let kai =new Hero('凯',11,true,22,'郑州');
        console.log(kai);
        console.log(kai.name);
        kai.sing('郑州');

        /* 
          构造函数：
             1.作用：创建对象
             2.返回值是一个对象，默认省略
             3.封装的代码是，给对象多态的添加属性的方法
             4.this是当前对象
             5.函数名用大驼峰
             6.配合关键字new使用
             7.构造函数和类是一码事
             8.就是对象公共属性和方法的抽取
             9.属性名和形参尽量保持一致，刻度性强。

             约定大于规范，规范大于编码
        */
    </script>
</body>
</html>